//import { sendSerialCommand } from './serialCommand.js';
/**
 * 设置bit位上的值
 * @param registerValue  寄存器的值
 * @param bitPosition  比特位，比如：第0位，则传值为0
 * @param state  修改的值：true-开启  false-关闭
 * @returns {*|number}
 */
function setBitPositionValue(registerValue, bitPosition = 0, state) {
    console.log("设置bitPosition前的值："+bitPosition);
    // 设置指定的 bit 位
    if (state) {
        registerValue |= (1 << bitPosition); // 设置为 1
    } else {
        registerValue &= ~(1 << bitPosition); // 设置为 0
    }

    console.log("设置bitPosition后的值："+bitPosition);
    return registerValue
}

/**
 * 设置-单一保持寄存器-请求命令
 * @param slaveId 设备地址（从站ID)
 * @param registerAddress 寄存器地址
 * @param bitPosition bit 位，配置的具体功能。比如：第0位位设置[紧急开关按钮],值为0或者1
 * @param state  修改的值：true-开启  false-关闭
 * @param functionCode  功能码（写单一保持寄存器）
 */
function setBitPositionValueReq(registerAddress = 0x0101, bitPosition = 0, state = true, slaveId = 0x01, functionCode = 0x06) {
    // 获取寄存器上的值
    let registerValue = serialLocalStorage.get("registerValue" + registerAddress);

    // 如果本地存储有就直接用
    if (registerValue !== '' && registerValue != null) {
        // step1: 设置bit位上的值
        registerValue = setBitPositionValue(registerValue, bitPosition, state);
    }else {
        registerValue = 0;
        // step1: 设置bit位上的值
        registerValue = setBitPositionValue(registerValue, bitPosition, state);
    }

    // 保存寄存器上的值
    serialLocalStorage.put("registerValue" + registerAddress, registerValue);

    // step2: 发送命令
    sendSerialCommand(slaveId, functionCode, registerAddress, registerValue);

    return true;
}

/**
 * 设置单一保持寄存器的值--请求命令
 * @param slaveId 设备地址（从站ID)
 * @param registerAddress 寄存器地址
 * @param registerValue  状态：true-开启  false-关闭
 * @param functionCode  功能码（写单一保持寄存器）
 */
function setRegisterValueReq(registerAddress = 0x0101, registerValue = 0, slaveId = 0x01, functionCode = 0x06) {
    // step2: 发送命令
    sendSerialCommand(slaveId, functionCode, registerAddress, registerValue);

    return true;
}
